package com.example;

public class Dog extends Animal {

    public Dog(String name, int age, String color) {
        super(name, age, color);
    }

    public void bark() {
        System.out.println("Woof!");
    }

    // @Override 注解 表示重写父类的方法
    @Override // 重写父类的方法
    public String getName() {
        return super.getName() + "注解重写";
    }

    // 重写父类的方法 父类的方法是抽象方法 子类必须实现
    @Override
    public void makeSound() {
        System.out.println("Dog is barking");
    }

    // 重载 方法名相同 参数列表不同
    public String like(String food) {
        return "狗喜欢吃" + food;
    }

    public String like(String food, String toy) {
        return "狗喜欢吃" + food + "而且喜欢玩" + toy;
    }

    // 在 Java 里，当方法定义时 void 前面没有显式指定访问修饰符（像 public、private、protected），这意味着该方法采用的是默认的访问修饰符，也称作包访问权限（package-private）。下面为你详细解释这种访问权限的特性：
    // 包访问权限的特点
    // ● 同一包内可访问 处于同一包中的其他类能够访问该方法
    // ● 不同包内不可访问 若类处于不同的包，就无法访问带有默认访问修饰符的方法
    void testDog() {
        System.err.println("测试同一个包内");
    }

}
